﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace JeuDeDames_v1._02
{
    public class Humain : Joueur
    {
        #region Constructeurs
        public Humain(int color, string nom)
        {
            this.couleur = color;
            this.nom = nom;
            this.lesPieces = new List<Piece>();
            this.piecesMangees = new List<int>();
            this.nbDames = 0;
            if (color == BLANC)
            {
                this.monTour = true;
                indicePromote = new int[5] { 1, 3, 5, 7, 9 };
            }
            else if (color == NOIR)
            {
                this.monTour = false;
                indicePromote = new int[5] { 90, 92, 94, 96, 98 };
            }
        } 
        #endregion

        #region Méthodes
        public Coup coupAJouer(Damier d)
        {
            Coup leCoup = null;
            bool test;
            int caseChoisi1 = 0, caseChoisi2 = 0;
            CaseN caseOrig;
            CaseN caseDest;
            do
            {
                try
                {
                    test = false;
                    caseOrig = null;
                    caseDest = null;
                    do
                    {
                        Console.Write("Choisir votre pièce à jouer:\t");
                        caseChoisi1 = Coup.convertInt(Console.ReadLine());
                    } while (caseChoisi1 == -1);
                    caseOrig = d.damier[caseChoisi1] as CaseN;
                    do
                    {
                        Console.Write("Où déplacer votre " + caseOrig + " : \t");
                        caseChoisi2 = Coup.convertInt(Console.ReadLine());
                    } while (caseChoisi2 == -1);
                    caseDest = d.damier[caseChoisi2] as CaseN;
                    foreach (Coup c in this.coupsPossibles)
                    {
                        if (c.orig == caseOrig && c.dest == caseDest)
                        {
                            test = true;
                            leCoup = c;
                            break;
                        }
                    }
                }
                catch (IndexOutOfRangeException) { /*TODO : d.afficheDamier(); this.afficheCoupsPossibles();*/ test = false; }

            } while (test == false);

            return leCoup;

        }//coupAJouer(); demande à l'humain de rentrer un coup valide. 


        public void jouerIA(Damier d, ref Coup coup, bool premierCoup = true)
        {
            {
                try
                {
                    if (!d.historiqueCoups.Contains(coup))
                        d.historiqueCoups.Add(coup);
                    if (coup.mange())   //si le coup mange
                    {
                        coup.orig.piece.mange(coup);
                        this.coupsPossibles = this.calculCoupsPossibleQuiMangentApres(d, coup);
                        this.affichePieceMange();
                        d.afficheDamier();
                        if (this.coupsMangeables())
                        {
                            if (this.coupsPossibles.Count() > 1)
                            {
                                Random r = new Random();
                                coup = this.coupsPossibles[r.Next(this.coupsPossibles.Count)];
                            }
                            //coup = (this as Ordinateur).coupAleatoire();
                            else if (this.coupsPossibles.Count() == 1)
                                coup = this.coupsPossibles[0];
                            jouerIA(d, ref coup, false);
                        }
                    }
                    else if (premierCoup)    //si il ne mange pas alors c'est un déplacement. Si c'est un déplacement c'est obligatoirement le premier coup.
                    {
                        coup.orig.piece.seDeplacer(coup);
                    }
                }
                catch (NullReferenceException) { }
            }
        }
        #endregion


    }
}
